#ifndef _PowerArray_h_
#define _PowerArray_h_

#include "CtrlLib/CtrlLib.h"

// Standard look n feel for all our ArrayCtrls
//============================================================================================================================
void ArrangeArray(ArrayCtrl &array) {
	array.MultiSelect();
	array.ClickFocus();
	array.SetLineCy(15); // line height as small as readable
	array.OddRowColor(); // Makes it more readable
	array.NoHorzGrid(); // Makes it more readable
	array.NoVertGrid(); // Makes it more readable
	array.Track(); // Column headers display while moving
	array.AskRemove();
	array.AllSorting();
	array.Header(true);
	array.Moving();
	//array.NoDuplicating()
	//array.NoInitFocus()
	//array.NoWantFocus()
	// NoInitFocus() NoWantFocus() 
	//array.NoMouseMoveCursor();
	//array.IgnoreMouse()
	//array.NoPopUpEx(); // Hide popups?
}

//============================================================================================================================
class PowerArray : public ArrayCtrl {
public:
	//============================================================================================================================
	bool Accept() {
		return ArrayCtrl::Accept();
		
	}
	
	//============================================================================================================================
	void DragAndDrop(Point p, PasteClip& d) {
		ArrayCtrl::DragAndDrop(p, d);
	}
	
	//============================================================================================================================
	virtual void Paint(Draw& w) {
		ArrayCtrl::Paint(w);
	}

	//============================================================================================================================
	virtual void Xmlize(XmlIO xml) {
		Vector <int> columnWidths;
		
		if (xml.IsStoring()) {
			for (int i = 0; i < HeaderObject().GetCount(); i++) {
				int w = HeaderObject().GetTabWidth(i);
				columnWidths.Add(w);
			}
			
			xml("columnwidths", columnWidths);
		} else {
			xml("columnwidths", columnWidths);
			
			if (columnWidths.GetCount()) {
				for (int i = 0; i < HeaderObject().GetCount(); i++) {
					int w = columnWidths.At(i, 30); // Default to 30
					HeaderObject().SetTabWidth(i, w);
				}
			}
		}
	}
	//============================================================================================================================
//	virtual const Display& GetCellInfo(int i, int j, bool f0, Value& v, Color& fg, Color& bg, dword& st) {
//        return ArrayCtrl::GetCellInfo(i,j,f0,v,fg,bg,st);
//    }

};

#endif
